# bash completion for quota-tools                          -*- shell-script -*-

_user_or_group()
{
    local i

    # complete on groups if -g was given
    for ((i = 1; i < cword; i++)); do
        if [[ ${words[i]} == -@(g|-group) ]]; then
            COMPREPLY=($(compgen -g -- "$cur"))
            return
        fi
    done

    # otherwise complete on users
    COMPREPLY=($(compgen -u -- "$cur"))
}

_quota_parse_help()
{
    COMPREPLY=($(
        compgen -W '$(_parse_help "$1" || _parse_usage "$1")' -- "$cur"
    ))
    [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
}

_quota_formats()
{
    COMPREPLY=($(compgen -W 'vfsold vfsv0 rpc xfs' -- "$cur"))
}

_filesystems()
{
    #  Only list filesystems starting with "/", otherwise we also get
    #+ "binfmt_misc", "proc", "tmpfs", ...
    COMPREPLY=($(compgen -W "$(awk '/^\// {print $1}' /etc/mtab)" \
        -- "$cur"))
}

_quota()
{
    local cur prev words cword split
    _init_completion -s || return

    case $prev in
        -F | --format)
            _quota_formats
            return
            ;;
        -h | --help | -V | --version)
            return
            ;;
    esac

    $split && return

    if [[ $cur == -* ]]; then
        _quota_parse_help "$1"
    else
        _user_or_group
    fi
} &&
    complete -F _quota -o default quota

_setquota()
{
    local cur prev words cword split
    _init_completion -s || return

    case $prev in
        -F | --format)
            _quota_formats
            return
            ;;
        -p | --prototype)
            _user_or_group
            return
            ;;
        -h | --help | -V | --version)
            return
            ;;
    esac

    $split && return

    if [[ $cur == -* ]]; then
        _quota_parse_help "$1"
    else
        local args
        _count_args

        case $args in
            1)
                _user_or_group
                ;;
            2)
                _filesystems
                ;;
        esac

    fi
} &&
    complete -F _setquota -o default setquota

_edquota()
{
    local cur prev words cword split
    _init_completion -s || return

    case $prev in
        -F | --format)
            _quota_formats
            return
            ;;
        -f | --filesystem)
            _filesystems
            return
            ;;
        -p | --prototype)
            _user_or_group
            return
            ;;
        -h | --help | -V | --version)
            return
            ;;
    esac

    $split && return

    if [[ $cur == -* ]]; then
        _quota_parse_help "$1"
    else
        _user_or_group
    fi
} &&
    complete -F _edquota -o default edquota

_quotacheck()
{
    local cur prev words cword split
    _init_completion -s || return

    case $prev in
        -F | --format)
            _quota_formats
            return
            ;;
        -h | --help | -V | --version)
            return
            ;;
    esac

    $split && return

    if [[ $cur == -* ]]; then
        _quota_parse_help "$1"
    else
        _filesystems
    fi
} &&
    complete -F _quotacheck -o default quotacheck repquota

_quotaon()
{
    local cur prev words cword split
    _init_completion -s || return

    case $prev in
        -F | --format)
            _quota_formats
            return
            ;;
        -x | --xfs-command)
            COMPREPLY=($(compgen -W 'delete enforce' -- "$cur"))
            return
            ;;
        -h | --help | -V | --version)
            return
            ;;
    esac

    $split && return

    if [[ $cur == -* ]]; then
        _quota_parse_help "$1"
    else
        _filesystems
    fi
} &&
    complete -F _quotaon -o default quotaon quotaoff

# ex: filetype=sh
